package com.zyg.order.service.impl;

import com.alibaba.fastjson.JSON;
import com.zyg.common.utils.IdWorker;
import com.zyg.order.dao.TbOrderItemMapper;
import com.zyg.order.dao.TbOrderMapper;
import com.zyg.order.enttiy.Cart;
import com.zyg.order.enttiy.TbOrder;
import com.zyg.order.enttiy.TbOrderItem;
import com.zyg.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * ------------------------------
 * 作者: LMY
 * 类-功能: XX
 * 创建时间: 2021-11-18 01:38
 * ------------------------------
 **/
@Service
public class OrderServiceImpl implements OrderService {
    
    @Autowired
    private StringRedisTemplate redisTemplate;

    @Autowired
    private IdWorker idWorker;

    @Autowired
    private TbOrderItemMapper  orderItemMapper;

    @Autowired
    private TbOrderMapper orderMapper;


    /**
     * 作者 : LMY
     * 功能 : 通过用户名，从Redis取出购物车
     * 时间 : 2021/11/18 1:39
     */ 
    @Override
    public List<Cart> getCartList(String name) {
        //1. 根据登录名查出对应的购物车
        String cartStr = redisTemplate.opsForValue().get(name);
        //2. 转成list集合返回
        return JSON.parseArray(cartStr,Cart.class);
    }
    /**
     * 作者 : LMY
     * 功能 : 保存订单，
     * 时间 : 2021/11/18 20:51
     */
    @Override
    @Transactional //加上事务注解
    public void saveOrder(String name, TbOrder order) {
        //1. 取出购物车
        List<Cart> cartList = getCartList(name);

        //2. 遍历购物车
        for (Cart cart : cartList) {
            //第一部分，构建订单
            //2.1 生成一个随机订单id
            long orderId = idWorker.nextId();
            //2.2. 为传入的订单对象赋属性值
            order.setSellerId(cart.getSellerId());  //商家id
            order.setOrderId(orderId);              //订单id
            order.setCreateTime(new Date());        //创建时间
            //order.setPaymentType(order.getPaymentType()); //支付类型:1、在线支付，2、货到付款
            order.setUserId(name);
            order.setStatus("1");            //支付状态：默认为1 (状态：1、未付款，2、已付款，3、未发货，4、已发货，5、交易成功，6、交易关闭,7、待评价)
            order.setSourceType("2");      //数据来源
            order.setUpdateTime(new Date()); //修改订单时间，第一次为创建时间

            //2.3 定义计算订单总价的变量
            double totalPrice = 0;

            //第二部分：构建订单项
            //2.3 遍历商品项列表
            for (TbOrderItem item : cart.getOrderItemList()) {
                //2.3.1 将订单项和订单建立外键关联
                item.setOrderId(orderId);
                item.setSellerId(cart.getSellerId());  //商家id
                item.setId(idWorker.nextId());

                //2.3.2 计算订单总金额
                totalPrice += item.getTotalFee().doubleValue();

                //2.3.3 添加订单项到数据库
                orderItemMapper.insert(item);
            }
            //2.4 设置订单总金额
            order.setPayment(new BigDecimal(totalPrice));

            //2.5 添加订单
           orderMapper.insert(order);
        }

        System.out.println(" 添加订单成功！" );
    }


}
